home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / COMAL / Z-Misc Series / (k)zk.d64 / txt.xpl0 < prev    next >
Text File  |  2007-03-01  |  10KB  |  487 lines

  1. *************************************
  2. *                                   *
  3. * ┴ ╙HORT ╔NTRODUCTION ╘O ╘HE       *
  4. * ╪╨╠/0 ├OMPILER ╙YSTEM             *
  5. *                                   *
  6. *************************************
  7.  
  8. ╔NTRODUCTION
  9. ------------
  10.  
  11. ╘HE LANGUAGE ╪╨╠/0 IS AN EXTENSION OF
  12. THE ╨╠/0 LANGUAGE INVENTED BY PROF.
  13. ╬. ╫IRTH, TO SERVE AS AN EXAMPLE
  14. LANGUAGE IN A CHAPTER ON COMPILER
  15. TECHNIQUES IN HIS BOOK
  16.  
  17. ┴LGORITHMS+─ATA ╙TRUCTURES=╨ROGRAMS
  18. (╨RENTICE ╚ALL, 1976)
  19.  
  20. ╔N THIS BOOK PROF. ╬.╫IRTH DEVELOPES
  21. A COMPILER SYSTEM CAPABLE OF
  22. COMPILING AND EXECUTING ╨╠/0
  23. PROGRAMS. ╘HIS SYSTEM IS IMPLEMENTED
  24. AS ONE PROGRAM WRITTEN THE HIGH LEVEL
  25. LANGUAGE ╨ASCAL.
  26.  
  27. ╘HE PRESENT IMPLEMENTATION OF ╪╨╠/0
  28. IS A TRANSLATION OF THIS PROGRAM TO
  29. THE NEW HIGH LEVEL LANGUAGE ├╧═┴╠-80,
  30. WITH A FEW EXTENSIONS. ╔N ADDITION,
  31. THE PROGRAM HAS BEEN MODULARIZED IN
  32. ORDER TO DEAL WITH THE STORAGE
  33. RESTRICTIONS OF AN INTERACTIVE
  34. ENVIRONMENT SUCH AS THE ONE OFFERED
  35. BY ├╧═┴╠-80.
  36.  
  37. ╔T MUST BE EMPHASIZED THAT NEITHER
  38. THE LANGUAGE ╪╨╠/0 NOR ITS PRESENT
  39. ├╧═┴╠80 BASED IMPLEMENTATION ARE
  40. INTENDED FOR A SERIOUS USE BY A
  41. PROGRAMMER. ╥ATHER, IT IS HOPED TO BE
  42. AN INSTRUCTIVE EXAMPLE ON THE FORCES
  43. OF ├╧═┴╠-80 AND ON COMPILER
  44. TECHNIQUES.
  45.  
  46. ─ESCRIPTION OF ╪╨╠/0
  47. --------------------
  48.  
  49. ┬ELOW THE GENERAL FEATURES AND THE
  50. DETAILED SYNTAX OF ╪╨╠/0 ARE
  51. DESCRIBED. 
  52.  
  53. ╪╨╠/0 CAN BEST BE DECRIBED AS A VERY
  54. RESTRICTIVE RELATIVE OF ╨ASCAL. ╔T
  55. REQUIRES ALL USED OBJECTS TO BE
  56. DECLARED BEFORE USE, AND OFFERS
  57. DECLARATION OF CONSTANTS, VARIABLES
  58. (ALL OF INTEGER TYPE) AND
  59. PARAMETERLESS PROCEDURES, WHICH CAN
  60. CONTAIN LOCAL DECLARATIONS OF
  61. CONSTANTS, VARIABLES AND OTHER
  62. PROCEDURES. ╘HE PROCEDURES CAN CALL
  63. THEMSELVES OR EACH OTHER RECURSIVELY,
  64. PRECISELY AS IN ╨ASCAL.
  65.  
  66. ╘HE READER SHOULD CONSULT THE ╪╨╠/0
  67. PROGRAM ╘┼╙╘1 FOR EXAMPLES ON THE
  68. VARIOUS FEATURES OF ╪╨╠/0. ╘HIS
  69. PROGRAM MAY BE OBTAINED BY AN 
  70.  
  71.  ┼╬╘┼╥ "PL0.TEST1"
  72.  
  73. COMMAND WHEN IN THE ├╧═┴╠-80 COMMAND
  74. MODE.
  75.  
  76. ╘HE PRIMITIVE STATEMENTS (IE. THOSE
  77. STATEMENTS THAT DO NOT CONTAIN OTHER
  78. STATEMENTS) ARE THE ASSIGNMENT
  79. STATEMENT, THE PROCEDURE CALL
  80. STATEMENT AND THE ╥┼┴─, ╫╥╔╘┼ AND
  81. ╫╥╔╘┼╠╬ STATEMENTS.
  82.  
  83. **** ┴╙╙╔╟╬═┼╬╘ ****
  84.  
  85. ╘HE ASSIGNMENT STATEMENT HAS THE
  86. FORM: 
  87.  
  88.  <VAR. IDENTIFIER> := <NUM. EXPRES.> 
  89.  
  90. WHERE <VAR. IDENTIFIER> IS THE NAME
  91. OF A DECLARED VARIABLE, IE. A LETTER
  92. FOLLOWED BY LETTERS AND DIGITS. ╧NLY
  93. THE FIRST 10 LETTERS AND DIGITS ARE
  94. CONSIDERED (THIS IS A COMPILER
  95. CONSTANT WHICH MAY BE CHANGED). ╘HE
  96. EFFECT OF THE ASSIGNMENT STATEMENT IS
  97. THAT THE VALUE OF THE EXPRESSION IS
  98. EVALUATED AND ASSIGNED TO THE
  99. VARIABLE.
  100.  
  101. ╬UMERICAL EXPRESSIONS (TO WHICH THE
  102. <NUM. EXPRES.> ABOVE REFERS) ARE
  103. DEFINED AS USUAL ARITHMETIC
  104. EXPRESSIONS, IN WHICH THE 4 OPERATORS
  105. + - * / MAY BE USED BETWEEN VARIABLE
  106. IDENTIFIERS, CONSTANT IDENTIFIERS,
  107. NUMBERS AND PARANTHESIZED NUMERICAL
  108. EXPRESSIONS. ╔N ADDITION, A NUMERICAL
  109. EXPRESSION MAY CONTAIN A LEADING + OR
  110. -. 
  111.  
  112. ┼XAMPLES OF ASSIGNMENT STATEMENTS
  113. EMBODYING NUMERICAL EXPRESSIONS ARE:
  114.  
  115.  ╧╬┼╓┴╥╔┴┬╠┼:=2*╨╔;
  116.  ═┼┴╬:=(╪+┘)/2;
  117.  ╓┴╥╔┴╬├┼:=(╪-═┼┴╬)*(╪-═┼┴╬)+
  118.            (┘-═┼┴╬)*(┘-═┼┴╬) 
  119.  
  120. **** ├┴╠╠ ****
  121.  
  122. ╘HE PROCEDURE CALL STATEMENT HAS THE
  123. FORM:
  124.  
  125.  ├┴╠╠ <PROCEDURE IDENTIFIER>
  126.  
  127. WHERE <PROCEDURE IDENTIFIER> IS THE
  128. NAME OF A PROCEDURE THAT HAS
  129. PREVIOUSLY BEEN DECLARED. ╔T CAUSES
  130. THE PROCEDURE TO BE EXECUTED. ┴FTER
  131. EXECUTION OF THE PROCEDURE, EXECUTION
  132. IS CONTINUED AFTER THE CALLING
  133. STATEMENT. ┼XAMPLE:
  134.  
  135.  ├┴╠╠ ╨╥╧├
  136.  
  137. **** ╥┼┴─ ****
  138.  
  139. ╘HE ╥┼┴─ STATEMENT HAS THE FORM: 
  140.  
  141.  ╥┼┴─(<VARIABLE IDENTIFIER>)
  142.  
  143. AND WILL CAUSE A PROMPT, ']', ON THE
  144. TERMINAL, FOLLOWING WHICH THE USER IS
  145. EXPECTED TO KEY IN A NUMBER. ╘HIS
  146. NUMBER WILL THEN BE ASSIGNED TO THE
  147. VARIABLE. ┼XAMPLE:
  148.  
  149.  ╥┼┴─(╪)
  150.  
  151. **** ╫╥╔╘┼ ****
  152.  
  153. ╘HE ╫╥╔╘┼ STATEMENT HAS THE FORM: 
  154.  
  155.  ╫╥╔╘┼(<NUMERICAL EXPRESSION> 
  156.  
  157. WHERE THE <NUMERICAL EXPRESSION> IS
  158. DEFINED AS ABOVE. ╔TS EFFECT IS THAT
  159. THE VALUE OF THE NUMERICAL EXPRESSION
  160. IS COMPUTED AND DISPLAYED ON THE
  161. TERMINAL. 
  162.  
  163. ┼XAMPLES:
  164.  
  165.  ╫╥╔╘┼(═┼┴╬);
  166.  ╫╥╔╘┼(2*╔-23)
  167.  
  168.  
  169. **** ╫╥╔╘┼╠╬ ****
  170.  
  171. ╘HE ╫╥╔╘┼╠╬ STATEMENT CONSISTS OF THE
  172. KEYWORD ╫╥╔╘┼╠╬ ONLY AND EFFECTS A
  173. RETURN-LINEFEED ON THE TERMINAL.
  174. ┼XAMPLE:
  175.  
  176.  ╫╥╔╘┼╠╬
  177.  
  178. ╘HE COMPOUND STATEMENTS (THOSE
  179. STATEMENTS THAT EMBODY OTHER
  180. STATEMENTS) ARE THE ┬┼╟╔╬-┼╬─ CLAUSE,
  181. THE ╔╞ STATEMENT, AND THE ╫╚╔╠┼
  182. STATEMENT. 
  183.  
  184. **** ┬┼╟╔╬ AND ┼╬─ ****
  185.  
  186. ╘HE ┬┼╟╔╬-┼╬─ CLAUSE IS USED MAINLY
  187. IN CONNECTION WITH THE ╔╞ AND ╫╚╔╠┼
  188. STATEMENTS AND IS A MEANS OF COUPLING
  189. SEVERAL STATEMENTS SO THEY WILL BE
  190. CONSIDERED A SINGLE STATEMENT - A
  191. SORT OF PARANTHESIZING. ╘HE FORM OF
  192. THE ┬┼╟╔╬..┼╬─ CLAUSE IS:
  193.  
  194.  ┬┼╟╔╬ <STATEMENT>;
  195.  <STATEMENT>; ... ┼╬─
  196.  
  197. WHERE THE ELLIPSIS (...) INDICATES
  198. THAT THE REPETITION OF THE PAIR
  199. <STATEMENT> AND ; MAY BE DONE AS MANY
  200. TIMES AS NEEDED. ╔T IS NOT NECESSARY
  201. TO INCLUDE THE SEMICOLON AFTER THE
  202. LAST STATEMENT. ╘HE EXECUTION OF THE
  203. ┬┼╟╔╬..┼╬─ CLAUSE CONSISTS OF THE
  204. EXECUTION OF EACH OF THE EMBODIED
  205. STATEMENTS IN THEIR TEXTUAL ORDER. 
  206.  
  207. ┼XAMPLES:
  208.  
  209.  ┬┼╟╔╬ ┴:=3 ┼╬─;
  210.  ┬┼╟╔╬
  211.   ╥┼┴─(╬);
  212.   ╫╥╔╘┼(2*(╬/6)+7);
  213.   ╙╒═╬:=╙╒═╬+╬
  214.  ┼╬─
  215.  
  216. **** ╔╞ ****
  217.  
  218. ╘HE ╔╞ STATEMENT HAS THE FORM: 
  219.  
  220.  ╔╞ <CONDITION> ╘╚┼╬ <STATEMENT> 
  221.  
  222. WHERE <STATEMENT> MAY BE ANY
  223. STATEMENT, ESPECIALLY A ┬┼╟╔╬-┼╬─
  224. CLAUSE. ╘HE CONDITION IS DEFINED
  225. BELOW. ╘HE EXECUTION OF THE ╔╞
  226. STATEMENT DEPENDS ON THE CONDITION.
  227. ╔F THE CONDITION HOLDS THE STATEMENT
  228. AFTER ╘╚┼╬ IS EXECUTED. ╔F THE
  229. CONDITION DOES NOT HOLD, NOTHING WILL
  230. HAPPEN. 
  231.  
  232. ┼XAMPLES:
  233.  
  234.  ╔╞ ╤<═╔╬ ╘╚┼╬ ═╔╬:=╤;
  235.  ╔╞ ╪<>0 ╘╚┼╬
  236.  ╔╞ ┘/╪<5 ╘╚┼╬
  237.  ┬┼╟╔╬ ╥┼╙╒╠╘:=╪;
  238.  ╫╥╔╘┼(╪);
  239.  ╫╥╔╘┼╠╬
  240.  ┼╬─
  241.  
  242. **** ╫╚╔╠┼ ****
  243.  
  244. ╘HE ╫╚╔╠┼ STATEMENT HAS THE FORM: 
  245.  
  246.  ╫╚╔╠┼ <CONDITION> ─╧ <STATEMENT> 
  247.  
  248. WHERE THE ABOVE REMARKS APPLY. ╘HE
  249. EXECUTION OF THE ╫╚╔╠┼ STATEMENT
  250. PROCEEDS AS FOLLOWS. ╞IRST, THE
  251. CONDITION IS EVALUATED. ╔F IT HOLDS,
  252. THE STATEMENT AFTER ─╧ IS EXECUTED,
  253. OTHERWISE THE EXECUTION OF THE ╫╚╔╠┼
  254. STATEMENT FINISHED. ╞OLLOWING ANY
  255. EXECUTION OF THE STATEMENT AFTER ─╧,
  256. THE CONDITION IS AGAIN EVALUATED, AND
  257. IF IT SHOWS UP TO HOLD, EXECUTION OF
  258. THE STATEMENT AFTER ─╧ IS REPEATED.
  259. ╘HIS ALTERNATION BETWEEN EVALUATION
  260. OF THE CONDITION AND EXECUTION OF THE
  261. STATEMENT AFTER ─╧ IS CONTINUED UNTIL
  262. THE CONDITION DOES NOT HOLD ANY
  263. LONGER. 
  264.  
  265. ┼XAMPLES:
  266.  
  267.  ╫╚╔╠┼ ╧── ╔ ─╧ ╥┼┴─(╔);
  268.  ╫╚╔╠┼ ╔<10 ─╧ 
  269.  ┬┼╟╔╬ ╫╥╔╘┼(╔);
  270.  ╔:=╔+1
  271.  ┼╬─
  272.  
  273. **** ╧── AND RELATIVE OPERATORS *** 
  274.  
  275. ┴ CONDITION HAS EITHER THE FORM: 
  276.  
  277.  ╧── <EXPRESSION>
  278.  
  279. AND IS FULLFILLED PRECISELY WHEN THE
  280. VALUE OF THE EXPRESSION IS ODD, OR 
  281.  
  282.  <EXPR> <RELAT. OPERATOR> <EXPR> 
  283.  
  284. WHERE <RELAT. OPERATOR> IS ONE OF THE
  285. OPERATORS
  286.  
  287.  < <= = >= > <>
  288.  
  289. ╘HE CONDITION IS FULLFILLED PRECISELY
  290. WHEN THE VALUE OF THE EXPRESSIONS
  291. HAVE THE STATED RELATION TO EACH
  292. OTHER. ┼XAMPLES ARE FOUND ABOVE IN
  293. THE DISCUSSION OF THE ╔╞ AND ╫╚╔╠┼
  294. STATEMENTS.
  295.  
  296. ┴ PROGRAM CONSISTS OF FIRST A SET OF
  297. DECLARATIONS, THEN A STATEMENT
  298. UTILIZING THESE DECLARATIONS (THIS
  299. WILL MOST OFTEN BE A ┬┼╟╔╬-┼╬─
  300. CLAUSE), AND ENDS WITH A PERIOD ( .
  301. ). ╘HE DECLARATIONS WILL BE SUBJECT
  302. OF THE NEXT PARAGRAPHS.
  303.  
  304. ┴S MENTIONED, CONSTANTS, VARIABLES
  305. AND PROCEDURES MAY BE DECLARED, AND
  306. THE DECLARATIONS MUST BE IN THIS
  307. SEQUENCE. 
  308.  
  309. **** ├╧╬╙╘ ****
  310.  
  311. ┴ CONSTANT DECLARATION HAS THE FORM:
  312.  
  313.  ├╧╬╙╘ <CONSTANT IDENTF>=<NUMBER>, 
  314.  <CONSTANT IDENTF>=<NUMBER>, ... ;
  315.  
  316. WHERE THE ELLIPSIS (...) AGAIN
  317. SIGNIFIES THAT ANY NUMBER OF
  318. CONSTANTS CAN BE DECLARED, IF ONLY
  319. THEY ARE SEPARA TED BY COMMAS. ╔T IS
  320. NOT ALLOWED TO WRITE A COMMA BETWEEN
  321. THE LAST <NUMBER> AN THE SEMICOLON.
  322. ┼XAMPLE:
  323.  
  324.  ├╧╬╙╘ ╨╔=3, ╘╫╧=2;
  325.  
  326. **** ╓┴╥ ****
  327.  
  328. ┴ VARIABLE DECLARATION HAS THE FORM: 
  329.  
  330.  ╓┴╥ <VARIABLE IDENTIFIER>,
  331.  <VARIABLE IDENTIFIER>,
  332.  ... ;
  333.  
  334. WITH THE SAME USE OF THE ELLIPSIS.
  335. ┴GAIN, A COMMA MAY NOT APPEAR BETWEEN
  336. THE LAST <VARIABLE IDENTIFIER> AND
  337. THE SEMICOLON. 
  338.  
  339. ┼XAMPLE:
  340.  
  341.  ╓┴╥ ┴, ┬, ├, ╫, ─, ╓┴╥╔┴┬╠┼; 
  342.  
  343. **** ╨╥╧├┼─╒╥┼ ****
  344.  
  345. ┴ PROCEDURE DECLARATION HAS THE FORM:
  346.  
  347.  
  348.  ╨╥╧├┼─╒╥┼ <PROC IDENTIFIER>;
  349.  <LOCAL CONSTANT, VARIABLE AND
  350. PROCEDURE DECLARATIONS>;
  351.  <STATEMENT>;
  352.  
  353.  
  354. WHERE THE STATEMENT MAY, OF COURSE,
  355. BE A ┬┼╟╔╬-┼╬─ CLAUSE. ┼XAMPLES MAY
  356. BE FOUND IN THE PROGRAM ╨╠0.╘┼╙╘1
  357.  
  358. ┴NY DECLARATION HAS A SCOPE, WHICH IS
  359. THE AREA OF THE PROGRAM FOR WHICH IT
  360. IS IN EFFECT. ╘HE SCOPE OF A
  361. DECLARATION IS THE PROCEDURE ╨ TO
  362. WHICH IT IS LOKAL, PLUS THE
  363. PROCEDURES DECLARED TO ╨ AND THE
  364. PROCEDURES DECLARED LOCAL TO ANY OF
  365. THESE PROCEDURES ETC., WITH THE
  366. RESTRICTION THAT NO CONSTANT,
  367. VARIABLE OR PROCEDURE MAY BE USED
  368. BEFORE ITS DECLARATION. ╘HE MAIN
  369. PROGRAM IS CONSIDERED A NAMELESS
  370. PROCEDURE IN THIS RESPECT. 
  371.  
  372. ╞ILES CREATED BY ╪╨╠0
  373. ---------------------
  374.  
  375. ╞ROM THE PROGRAM FILE 
  376.  
  377.  ╨╠0.╬┴═┼ 
  378.  
  379. THE FOLLOWING FILES ARE CREATED BY
  380. THE ╪╨╠0 COMPILER:
  381.  
  382. BY ╪╨╠╧╠┼╪╔: ╠┼╪.╬┴═┼
  383. BY ╪╨╠0├╧═╨: ├╧─.╬┴═┼
  384.  
  385. THE LAST FILE ONLY IF NO ERRORS ARE
  386. FOUND DURING COMPILATION.
  387.  
  388. ╘HE PROGRAM ╪╨╠0╔╬╘╨ EXECUTES THE
  389. CODE FROM THE FILE ├╧─.╬┴═┼.
  390.  
  391. ╘HE COMPILED CODE CAN BE READ WITH
  392. THE OPTION ╨ (╨RINTOUT OF THE CODE)
  393. IN THE ╪╨╠0 MAIN MENU.
  394.  
  395. ╞ILES USED BY ╪╨╠0
  396. ------------------
  397.  
  398. ╘HE FOLLOWING FILES ARE USED BY THE
  399. ╪╨╠0 COMPILER:
  400.  
  401. ╪╨╠0─┴╘┴ : THIS FILE CONTAINS THE
  402. NAME OF THE PROGRAM SOURCE FILE, AND
  403. THE NAME OF THE OUTPUT FILE (─╙: OR
  404. ╠╨:). ╘HIS FILE CANNOT NOT BE READ IN
  405. ├╧═┴╠ EDIT MODE. 
  406.  
  407. ╪╨╠0═┼╙╙ : THIS FILE CONTAINS THE COM
  408. PILER ERROR MESSAGES. ╔T IS A NORMAL
  409. ├╧═┴╠ ╠╔╙╘ FILE WITH ONLY REMARK
  410. STATE MENTS. ╔N COMMAND MODE THIS
  411. FILE CAN BE READ AFTER:
  412.  
  413.  ┼╬╘┼╥ "XPL0MESS"
  414.  ╠╔╙╘
  415.  
  416.  
  417. ╪╨╠0╚┼╠╨ : THIS FILE CONTAINS A ╚┼╠╨
  418. TEXT FOR THE ╪╨╠0 COMPILER. ╔T IS
  419. ALSO A NORMAL ├╧═┴╠ ╠╔╙╘ FILE SO THE
  420. FILE CAN BE READ AFTER
  421.  
  422.  ┼╬╘┼╥ "XPL0HELP"
  423.  ╠╔╙╘
  424.  
  425. ╘HIS LAST FILE IS ALSO USED IN THE
  426. COMPILER MAIN MODULE AFTER THE CHOICE
  427. OF THE OPTION ─ (─IRECTIONS OF USE). 
  428.  
  429. ╚OW TO CREATE AN ╪╨╠0 SOURCE FILE
  430. ---------------------------------
  431.  
  432. ┴N ╪╨╠0 SOURCE FILE IS A NORMAL ├╧═┴╠
  433. ╠╔╙╘ FILE CONSISTING OF ONLY ╥┼═ARKED
  434. LINES. ╙O THESE SOURCE FILES CAN BE
  435. CREATED USING ├╧═┴╠'S OWN EDITOR
  436. FACILITIES.
  437.  
  438. ╬OTE:
  439.  
  440. ┴LL ╪╨╠0 KEYWORDS, MUST BE WRITTEN IN
  441. LOWER CASE CHARACTERS:
  442.  
  443.   CONST
  444.   VAR
  445.   BEGIN .. END
  446.   READ
  447.   WRITE
  448.   WRITELN
  449.   PROCEDURE
  450.   CALL
  451.   IF .. THEN
  452.   WHILE .. DO
  453.   ODD
  454.  
  455. ┴N EXAMPLE.
  456.  
  457. 0010 // VAR TAB, N, PROD;
  458. 0020 // 
  459. 0030 // BEGIN
  460. 0040 //  READ(TAB);
  461. 0040 //  WHILE TAB>0 DO
  462. 0050 //   BEGIN
  463. 0060 //    N:=0;
  464. 0070 //    WHILE N<10 DO
  465. 0080 //     BEGIN
  466. 0090 //      N:=N+1;
  467. 0100 //      PROD:=N*TAB;
  468. 0110 //      WRITE(N); WRITE(PROD);
  469. 0120 //      WRITELN;
  470. 0130 //     END;
  471. 0140 //    WRITELN;
  472. 0150 //    READ(TAB)
  473. 0160 //   END;
  474. 0170 // END.
  475.  
  476. ┼VERY PROGRAM LINE MUST START WITH
  477. //. 
  478.  
  479. ╠╔╙╘ THIS PROGRAM TO DISK, ALWAYS
  480. USING THE PREFIX
  481.  
  482.  ╨╠0.
  483.  
  484. ═ORE INFORMATION CAN BE FOUND WITH
  485. THE OPTION ─ IN THE MAIN MODULE OF
  486. THE ╪╨╠0 COMPILER.
  487.